package org.baiyun.kaka.dao.impl;

import java.util.List;


import org.baiyun.kaka.dao.IUserDao;
import org.baiyun.kaka.entity.User;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Repository;


@Repository
public class UserDaoImpl extends BaseDaoImpl implements IUserDao {

	
	//实现findall方法
	@Override
	public List<User> findAll() {
		//执行查询
		return this.getCurrentSession().createQuery("from User").list();
	}

	@Override
	public User get(int id) {
		 Session session = this.getCurrentSession();//得到了数据库连接
		  return(User) session.get(User.class, id);//相当于给我一个表名，一个具体的数据的id
	}

	@Override
	public Integer save(User user) {
		return (int) this.getCurrentSession().save(user);
	}

	@Override
	public boolean delete(int id) {
		Session session = this.getCurrentSession();//得到数据的连接
		User user=this.get(id);//根据查询数据的方法，去数据库查询id为指定值的记录，如果有，vip变量就有值
		
		if(user!=null) { //如果数据库中有这个记录
		session.delete(user); //干掉：调用hibernate给我们提供的方法
		return true;      //返回成功了
		}else {
			return false;  //返回失败
		}
	}

	@Override
	public boolean update(User user) {
		Session session = this.getCurrentSession();//得到数据的连接	
		
		//查询数据在不在数据库里面
		User userInDB = this.get(user.getId());
		//判断一下vipInDB是不是为空
		if (userInDB==null) {
			return false;
		}else {
			//判断传进来的数据的字段，需要排除掉为空的字段，只修改那些不为空的字段
			if (user.getEmail()!=null) {
				userInDB.setEmail(user.getEmail());
			}
			if (user.getName()!=null) {
				userInDB.setName(user.getName());
			}
			if (user.getPassword()!=null) {
				userInDB.setPassword(user.getPassword());
			}
								
			//判断客户有没有设置vip
			if (user.getVip()!=null) {				
				userInDB.setVip(user.getVip());
				
			}

			session.update(userInDB);//调用hibernate的方法修改数据
			
			return true;
		}
	}

	@Override
	public List<User> findUserByName(String name) {
		Session session = this.getCurrentSession();//得到数据的连接
		String hql = "from User where name = :n";
		Query query = session.createQuery(hql);
		query.setParameter("n", name);
		List<User> list = query.list();
		return list;
	}

}
